package appname.example.com.testmvvm;

import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import appname.example.com.testmvvm.databinding.BviewViewBinding;

// 电量优化相关，就是各种锁相关。
public class Bactivity extends AppCompatActivity {

    private JobScheduler mJobScheduler;
    private final int JOB_ID = 1;



    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            new Thread(() ->
            {
                try {
                    Thread.sleep(3000);
                    Log.e("haha", "haha");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            ).start();
            handler.sendEmptyMessageDelayed(0, 3000);
        }
    };


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.bview_view);

        BviewViewBinding binding =
                DataBindingUtil.setContentView(this, R.layout.bview_view);

        binding.setCtrl(new BacvitivyCtr(binding));

       // voidc();

       // handler.sendEmptyMessage(0);

        aVoid();

       // initjob();
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public void initjob(){
        mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE );
        //通过JobInfo.Builder来设定触发服务的约束条件，最少设定一个条件
        JobInfo.Builder jobBuilder = new JobInfo.Builder(JOB_ID, new ComponentName(this, MyjobService.class));
        //循环触发，设置任务每三秒定期运行一次
       // jobBuilder.setPeriodic(3000);

        //单次定时触发，设置为三秒以后去触发。这是与setPeriodic(long time)不兼容的，
        // 并且如果同时使用这两个函数将会导致抛出异常。
       // jobBuilder.setMinimumLatency(3000);

        //在约定的时间内设置的条件都没有被触发时三秒以后开始触发。类似于setMinimumLatency(long time)，
        // 这个函数是与 setPeriodic(long time) 互相排斥的，并且如果同时使用这两个函数，将会导致抛出异常。
        jobBuilder.setOverrideDeadline(3000);

        //在设备重新启动后设置的触发条件是否还有效
        jobBuilder.setPersisted(false);

        // 只有在设备处于一种特定的网络状态时，它才触发。
        // JobInfo.NETWORK_TYPE_NONE,无论是否有网络均可触发，这个是默认值；
        // JobInfo.NETWORK_TYPE_ANY，有网络连接时就触发；
        // JobInfo.NETWORK_TYPE_UNMETERED，非蜂窝网络中触发；
        // JobInfo.NETWORK_TYPE_NOT_ROAMING，非漫游网络时才可触发；
        jobBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);

        //设置手机充电状态下触发
        jobBuilder.setRequiresCharging(true);

        //设置手机处于空闲状态时触发
        jobBuilder.setRequiresDeviceIdle(true);

        //得到JobInfo对象
        JobInfo jobInfo = jobBuilder.build();

        //设置开始安排任务，它将返回一个状态码
        //JobScheduler.RESULT_SUCCESS，成功
        //JobScheduler.RESULT_FAILURE，失败
        if (mJobScheduler.schedule(jobInfo) == JobScheduler.RESULT_FAILURE) {
            //安排任务失败
        }

        //停止指定JobId的工作服务
       // mJobScheduler.cancel(JOB_ID);
        //停止全部的工作服务
       // mJobScheduler.cancelAll();
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onDestroy() {
        super.onDestroy();
         mJobScheduler.cancel(JOB_ID);
        //停止全部的工作服务
         mJobScheduler.cancelAll();
    }

    public void voidc() {
        //创建唤醒锁
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        @SuppressLint("InvalidWakeLockTag")
        PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "partial_lock");
        //获取唤醒锁
        wakeLock.acquire();
        //一些关键的代码
        Log.e("aaa", "开始执行了");
        //释放唤醒锁
        wakeLock.release();

     //   Log.e("aaa", "开始执行了");
    }


    //  这个是一分钟唤醒一次
    public void aVoid() {
        //Intent intent = new Intent("WANG_LEI");
        //intent.putExtra("msg","起床了啊");
        //PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);

        Intent intent = new Intent(Bactivity.this, MainActivity.class);
        PendingIntent activity = PendingIntent.getActivity(this, 100, intent, 0);

        //PendingIntent broadcast = PendingIntent.getBroadcast(Bactivity.this, 100, new Intent("com.example.aaa"), 0);

        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        // 每隔5秒后通过PendingIntent pi对象发送广播
        am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5 * 1000, activity);
    }
}
